package cn.tedu.eb_film.service;

import cn.tedu.eb_film.pojo.page.CinemaPagination;
import cn.tedu.eb_film.pojo.dto.CinemaAddNewDTO;
import cn.tedu.eb_film.pojo.dto.CinemaFormDTO;
import cn.tedu.eb_film.pojo.dto.CinemaUpdateDTO;
import cn.tedu.eb_film.pojo.entity.CinemaList;
import cn.tedu.eb_film.pojo.vo.CinemaListVO;
import cn.tedu.eb_film.pojo.vo.CinemaServiceVO;
import cn.tedu.eb_film.pojo.vo.CinemaStandardVO;
import cn.tedu.eb_film.pojo.vo.SearchCinemaVo;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 电影院服务类
 *
 * @author ライナー・ロンテ
 * @since 2023/3/14 19:37
 */
public interface CinemaService {
    String[] ENABLE_TEXT= {"禁用","启用"};
    /**
     * 添加电影院
     *
     * @param cinemaFormDTO  电影院数据传输实体类
     */
    @Transactional(rollbackFor = Exception.class)
    void addNew(CinemaFormDTO cinemaFormDTO);

    /**
     * 批量新增电影院信息
     *
     * @param cinemaAddNewDTOS 电影院集合
     */
    @Transactional(rollbackFor = Exception.class)
    void addNews(List<CinemaAddNewDTO> cinemaAddNewDTOS);

    /**
     * 根据id删除数据
     *
     * @param id 需要删除的数据
     */
    @Transactional(rollbackFor = Exception.class)
    void deleteById(Long id);

    /**
     * 根据id批量删除数据
     *
     * @param id 需要删除的数据id集合
     */
    void deleteByIds(List<Long> id);

    /**
     * 统计表内总数量
     *
     * @return 总数量
     */
    Long count();

    /**
     * 根据id查询电影院数据
     *
     * @param id 查询的id
     * @return  返回电影院视图
     */
    CinemaStandardVO getCinemaStandardVOById(Long id);

    /**
     * 根据电影院id查询电影院服务信息
     * @param id 查询的Id
     * @return  CinemaServiceVO
     */
    CinemaServiceVO getCinemaServiceVOById(Long id);

    /**
     * 查询电影院数据
     * @return
     */
    List<CinemaList> list();

    /**
     * 分页查询所有电影院数据
     *
     * @return  电影院集合
     */
    CinemaListVO pageList(CinemaPagination pagination);


    /**
     * 编辑修改电影院
     *
     * @param cinema 修改后的数据
     */
    @Transactional(rollbackFor = Exception.class)
    void update(CinemaUpdateDTO cinema);

    @Transactional(rollbackFor = Exception.class)
    void enable(Long id);

    @Transactional(rollbackFor = Exception.class)
    void disable(Long id);

    @Transactional(rollbackFor = Exception.class)
    void edit(CinemaFormDTO cinemaFormDTO);

    List<SearchCinemaVo> getCinema(String name);

    List<SearchCinemaVo> loadCinema();

    List<SearchCinemaVo> getCinemaByAddress(String address);

    List<SearchCinemaVo> Imax();

    List<SearchCinemaVo> normal();
}
